草庐IT

Java Swingworker 和多线程

全部标签

c++ - 如何使用 boost::statecart 在固定数量的线程上多路复用多个异步状态机?

假设我有许多用boost::statecart定义的异步状态机。运行多个异步状态机的明确记录机制是将其中一个或多个固定到一个线程。但是,出于我的目的,我需要运行很多很多异步状态机,而每个线程一个是行不通的。此外,任何给定状态机完成的工作量是不可预测的,因此将状态机分配给固定线程会导致不平衡。相反,我想要一个线程池,空闲线程可以在其中从队列中提取一些工作量。这里需要注意一些事情,以便按顺序将事件传送到给定的状态机。大概开始的地方是涉及实现Scheduler和FifoWorker概念来做我想做的事情,分别作为fifo_scheduler和fifo_worker类的替代方案。但是,我想知道这

c++ - 使用 QueuedConnection 还是 QMutex 来使对象线程安全?

我正在构建一个需要加载数千个HTML文件的应用程序,分析它们然后将它们放入全局的HashMap之类的东西中,我决定使用多线程来加快速度。所以问题出现了,我应该使用QueuedConnection用于信号/槽或QMutex使HashMap线程安全。我使用QueueConnection使一切变得更简单,我创建了很多子线程来加载并将指针发回主线程以分析它们并将它们放入HashMap,然后它工作正常。然而,当我读到一些评论说QueueConnection实际上非常耗时时,我开始重新构建我的代码并使用QMutex使我的HashMap线程安全,然后我可以完成所有工作(加载,分析,将它们放到子线程中

多线程系列(七) -ThreadLocal 用法及内存泄露分析

一、简介在Javaweb项目中,想必很多的同学对ThreadLocal这个类并不陌生,它最常用的应用场景就是用来做对象的跨层传递,避免多次传递,打破层次之间的约束。比如下面这个HttpServletRequest参数传递的简单例子!publicclassRequestLocal{/***线程本地变量*/privatestaticThreadLocallocal=newThreadLocal();/***存储请求对象*@paramrequest*/publicstaticvoidset(HttpServletRequestrequest){local.set(request);}/***获取请求

多线程系列(八) -ReentrantLock基本用法介绍

一、简介在之前的线程系列文章中,我们介绍到了使用synchronized关键字可以实现线程同步安全的效果,以及采用wait()、notify()和notifyAll()方法,可以实现多个线程之间的通信协调,基本可以满足并发编程的需求。但是采用synchronized进行加锁,这种锁一般都比较重,里面的实现机制也非常复杂,同时获取锁时必须一直等待,没有额外的尝试机制,如果编程不当,可能就容易发生死锁现象。从JDK1.5开始,引入了一个高级的处理并发的java.util.concurrent包,它提供了大量更高级的并发功能,能大大的简化多线程程序的编写。比如我们今天要介绍的java.util.co

c++ - Qt 无法将目标移动到线程

我的Qt5.7(在Windows10上)应用程序中遇到了一个奇怪的错误,并且找不到导致这种行为的常见罪魁祸首:被移动的对象有一个父对象——当然不是这样尝试将对象拉到线程而不是将其推送-这是错误的原因,但我不知道它来自哪里完整的错误信息是QObject::moveToThread:Currentthread(0x2afcca68)isnottheobject'sthread(0x34f4acc8).Cannotmovetotargetthread(0x34f4adc8)QObject::setParent:Cannotsetparent,newparentisinadifferentth

c++ - 关闭时 Boost 日志中的 Boost 线程访问冲突

我有一个使用boost日志记录的应用程序。在关闭期间,它会在空指针访问时发生访问冲突。当我单步执行代码到失败点时,似乎正在取消分配boost::logdll,然后boost::thread代码尝试访问曾经被日志dll占用的内存。我没有在自己的代码中使用任何boost线程,因此假设boost-threaddll被boostlog使用。为了确保在关闭之前销毁所有接收器,我调用了:core->flush()和core->remove_all_sinks()我使用的是boost1.60,也曾在boost1.63上尝试过。相同的结果。有没有办法确保在退出/卸载dll之前完全关闭boost日志记录

c++ - FFmpeg:使用自定义线程池进行并行编码

我试图实现的其中一件事是通过FFmpeg的cAPI进行并行编码。这看起来开箱即用。但是,我稍微更改了目标帖子:在现有的应用程序中,我手边已经有一个线程池。我不想通过FFmpeg使用另一个线程池,而是想在我的应用程序中重用现有的线程池。研究了最新的FFmpegtrunk文档后,它看起来很有可能。使用一些FFmpeg示例代码,我创建了一个示例应用程序来演示我正在尝试实现的目标(见下文)。示例应用使用mp2v编解码器生成纯视频mpeg2ts。我遇到的问题是自定义“thread_execute”或“thread_execute2”从未被调用。尽管事实上编解码器似乎表明支持线程。请注意,我还没有

c++ - 从外部对象调用方法时,qt 的 gui 线程是否会在后台生成线程?

我最近在用C++开发基于Qt的应用程序时遇到了线程/内存问题,我正在寻找正确的解释。我无法真正发布一个功能完备的示例,因为这需要链接到Qt等。但是这个问题在几行简短的代码中得到了非常清楚的解释。当我点击gui上的按钮时,会发生这样的事情:voidMainWindow::onClick(){std::vectorvec;vec.push_back(0);dev.connect(vec);//dosomemorestuff}在这种情况下,dev是MainWindow的成员,并且属于Device类类型,表示硬件(或更准确地说,硬件驱动程序))我想与之联系。connect的代码是这样的:voi

c++ - webrtc native 应用程序中的每个对等点是否需要单独的 rtc::Runnable 线程和 PeerConnectionFactory 对象?

我正在尝试使用WebRTCnativeAPIs创建native应用程序.对于第一个对等节点,我创建了一个rtc::Runnable对象,并在其Run方法中创建了PeerConnectionFactory对象。然后我从那个对象创建一个peerconnection对象并创建报价并继续设置本地和远程描述以及ICE配置等,一切顺利。现在我想了解我应该为同一进程中的第二个对等方做什么。我是否需要创建另一个rtc::Runnable线程,或者我是否可以重用它及其对等连接工厂对象来创建一个单独的对等连接对象?它可能在文档中的某处,但我找不到它。很明显,我需要为每个对等点建立一个单独的对等连接,并为每

c++ - 几个线程 : catching the moment when they all finish work

我有几个线程,我需要捕获它们全部完成工作的时刻。怎么做?for(inti=1;i 最佳答案 考虑在forblock之外创建std::thread对象并调用join()而不是detach()://empty(nothreadsassociatedtothemyet)std::arraythreads1,threads2;for(inti=0;i不调用detach()意味着必须在std的析构函数之前调用join()::thread对象被调用(无论线程是否已经完成)。出于这个原因,我将std::thread对象放在了forblock之外。